﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BlueFinity.mvNET.CoreObjects;
using mvLibrary;

namespace fenk.Seguridad
{
    public partial class PermisosEspeciales : BaseForm
    {
        public const int TIPO_PANTALLA_INDEX = 20;
        public const int PANTALLA_ASOCIADA_INDEX = 25;
        public const int FECHA_ULTIMA_MODIFICACION_INDEX = 27;
        public const int HORA_ULTIMA_MODIFICACION_INDEX = 28;
        public const int IDPANTALLA_INDEX = 30;
        public IDictionary<int, RadioButton> tipoPantallas = new Dictionary<int, RadioButton>();
        
        public PermisosEspeciales()
        {
            InitializeComponent();
        }

        public void InicializarDesdeAfuera(string pantallaASegurizar)
        {
            this.mvPantalla.Focus();
            this.mvPantalla.Text = pantallaASegurizar;
            SendKeys.Send("{TAB}");
        }


        public override void AfterReadItem()
        {
            this.CargarDiccionarioConRadButtons();
            int tipoPantalla;
            int.TryParse(Item[TIPO_PANTALLA_INDEX].ToString(), out tipoPantalla);

            /*Con esto se inicializa el tipo de pantalla*/
            
            if (tipoPantalla > 0)
            {
                this.tipoPantallas[tipoPantalla].Checked = true;
            }
            else
            {
                Item[TIPO_PANTALLA_INDEX] = tipoPantalla;
            }

            this.VisualizarCamposReadOnly(true);
        }

        public override void BeforeSaveItem()
        {
            Item[FECHA_ULTIMA_MODIFICACION_INDEX] = DataBASIC.IConv(DateTime.Today, "D2/");
            Item[HORA_ULTIMA_MODIFICACION_INDEX] = DataBASIC.IConv(DateTime.Now, "MTS");
            Item[PANTALLA_ASOCIADA_INDEX] = Item[0];
        }

        protected override void OnCancelItem()
        {
            this.VisualizarCamposReadOnly(false);
            this.radPantalla.Checked = true;
        }


        private void radPantalla_CheckedChanged(object sender, EventArgs e)
        {
            if (this.radPantalla.Checked)
            {
                Item[TIPO_PANTALLA_INDEX] = 1;
            }
        }

        private void radListado_CheckedChanged(object sender, EventArgs e)
        {
            if (this.radListado.Checked)
            {
                Item[TIPO_PANTALLA_INDEX] = 2;
            }
        }

        private void radMenu_CheckedChanged(object sender, EventArgs e)
        {
            bool visibleColumns;
            string nombreColumnaConsulta;
            if (this.radMenu.Checked)
            {
                Item[TIPO_PANTALLA_INDEX] = 3;
                visibleColumns = false;
                nombreColumnaConsulta = "Visualizar Menu";
            }
            else
            {
                visibleColumns = true;
                nombreColumnaConsulta = "Consulta";
            }

            this.VisualizarColumnasNoEditablesParaMenu(visibleColumns,nombreColumnaConsulta);

        }

        private void CargarDiccionarioConRadButtons()
        {
            if (this.tipoPantallas.Count.Equals(0))
            {
                this.tipoPantallas.Add(1, this.radPantalla);
                this.tipoPantallas.Add(2, this.radListado);
                this.tipoPantallas.Add(3, this.radMenu);
            }
        }

        private void VisualizarCamposReadOnly(bool visible)
        {
            this.gpbTipoPantalla.Enabled = visible;
            this.lblHoraUltimaModificacion.Visible = visible;
            this.lblFechaUltimaModificacion.Visible = visible;
        }

        private void VisualizarColumnasNoEditablesParaMenu(bool visible, string nombreColumnaConsulta)
        {
            this.lvwPermisos.Columns[2].HeaderText = nombreColumnaConsulta;
            this.lvwPermisos.Columns[3].Visible = visible;
            this.lvwPermisos.Columns[4].Visible = visible;
            this.lvwPermisos.Columns[5].Visible = visible;
            this.lvwPermisos.Columns[6].Visible = visible;

        }
    }
}
